﻿using System;
using System.Data;

namespace Gestión_UTN.blimpl
{
    public class usuarioblimpl : bl.usuariobl
    {
        private static Gestión_UTN.da.usuarioda createUsuario = Gestión_UTN.factories.dafactory.createUsuario();

        public usuarioblimpl()
        {

        }

        public bool SaveUsuario(bo.Usuariobo user)
        {
            bool ingresado = false;

            try
            {
                ingresado = (null != user)
                    ? createUsuario.SaveUsuario(user.DNI, user.Nombre, user.Apellido,
                        user.User, user.Password, user.Posicion)
                        : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresado;
        }

        public bool DeleteUsuario(int dni)
        {
            bool eliminado = false;

            try
            {
                eliminado = (0 != dni)
                    ? createUsuario.DeleteUsuario(dni)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminado;
        }

        public bool ModifyUsuario(int dni_anterior, bo.Usuariobo user)
        {
            bool modificado = false;

            try
            {
                modificado = (0 != dni_anterior && null != user)
                    ? createUsuario.ModifyUsuario(dni_anterior, user.DNI, user.Nombre, user.Apellido,
                        user.User, user.Password, user.Posicion)
                        : false;
            }
            catch (exceptions.daexception ex)
            {
                modificado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificado;
        }

        public System.Data.DataTable FindAllUsuarios()
        {
            DataTable usuarios = null;

            try
            {
                usuarios = createUsuario.FindAllUsuarios();
            }
            catch (exceptions.daexception ex)
            {
                usuarios = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                usuarios = null;
                throw new exceptions.blexception(ex.Message);
            }

            return usuarios;
        }

        public bo.Usuariobo FindUsuarioByUsuario(string usuario, string password)
        {
            bo.Usuariobo user = null;

            try
            {
                Entities.Usuario usu = (!usuario.Equals("") && !password.Equals(""))
                    ? createUsuario.FindUsuarioByUsuario(usuario, password)
                    : null;

                if (null != usu)
                {
                    user = new bo.Usuariobo();

                    user.DNI = usu.DNI;

                    user.Apellido = usu.Apellido;

                    user.Nombre = usu.Nombre;

                    user.Password = password;

                    user.Posicion = usu.Posicion;

                    user.User = usuario;
                }
            }
            catch (exceptions.daexception ex)
            {
                user = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                user = null;
                throw new exceptions.blexception(ex.Message);
            }

            return user;
        }
    }
}
